package com.seedog.mq.core;

import com.seedog.mq.model.Message;
import com.seedog.mq.exception.TopicNotFoundException;

import java.util.List;

/**
 * 主题接口，代表消息的分类和目的地
 */
public interface Topic {
    /**
     * 获取主题名称
     * @return 主题名称
     */
    String getName();
    
    /**
     * 向主题发送消息
     * @param message 要发送的消息
     * @return 消息ID
     */
    String sendMessage(Message message);
    
    /**
     * 批量发送消息
     * @param messages 要发送的消息列表
     * @return 已发送的消息ID列表
     */
    List<String> sendMessages(List<Message> messages);
    
    /**
     * 从主题获取消息
     * @param consumerId 消费者ID
     * @param timeout 超时时间（毫秒）
     * @return 消息对象，如果没有消息则返回null
     */
    Message pollMessage(String consumerId, long timeout);
    
    /**
     * 确认消息已被消费
     * @param consumerId 消费者ID
     * @param messageId 消息ID
     * @return 是否确认成功
     */
    boolean acknowledge(String consumerId, String messageId);
    
    /**
     * 获取主题中的消息数量
     * @return 消息数量
     */
    int getMessageCount();
    
    /**
     * 获取主题中的消费者数量
     * @return 消费者数量
     */
    int getConsumerCount();
    
    /**
     * 添加消费者到主题
     * @param consumerId 消费者ID
     * @return 是否添加成功
     */
    boolean addConsumer(String consumerId);
    
    /**
     * 从主题中移除消费者
     * @param consumerId 消费者ID
     * @return 是否移除成功
     */
    boolean removeConsumer(String consumerId);
    
    /**
     * 关闭主题
     */
    void close();
}